/*
 *  Copyright 2010-2011 Mark Eschbach
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 * $HeadURL: http://phunctional-system-integration.googlecode.com/svn/tags/psi-reactor-2.4/branches/psi-2.4/cise-oss/src/main/java/com/meschbach/cise/jam/CopyVisitor.java $
 * $Id: CopyVisitor.java 242 2011-03-07 02:48:48Z marioandrest@gmail.com $
 */
package com.meschbach.cise.jam;

import com.meschbach.cise.util.StreamCopier;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**
 *
 * @author "Mark Eschbach" meschbach@gmail.com
 */
public class CopyVisitor implements EntryVisitor {

    private static final CopyVisitor SHARED_INSTANCE = new CopyVisitor();

    public static CopyVisitor getSharedInstance() {
        return SHARED_INSTANCE;
    }

    public void visitEntry(String name, ZipEntry sourceEntry, ZipInputStream input, ZipOutputStream output) throws IOException {
        /*
         * Configure ther esulting entry and write it
         */
        ZipEntry resultingEntry = new ZipEntry(sourceEntry.getName());
        resultingEntry.setComment(sourceEntry.getComment());
        resultingEntry.setTime(sourceEntry.getTime());
        output.putNextEntry(resultingEntry);
        /*
         * Copy the contents
         */
        StreamCopier sc = new StreamCopier(input, output);
        sc.doCopy();
        /*
         * Close our entry
         */
        output.closeEntry();
    }
}
